﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.IO;

namespace SInvaders
{
    class Ranking 
    {
        Texture2D telaRanking;
        Rectangle recMouseAtual;
        Texture2D botao;
        bool pressionado = true;
        string[] strNomes = new string[11];
        int[] PontosOrdenados = new int[11];
        string[] ponts;
        bool mostraRanking = true;
        public static List<Pontuacao> ranking = new List<Pontuacao>();
        SpriteFont Texto;
        public static int Recorde = 0;
        Aviso aviso;

        public static void InHUD()
        {
            ranking.Sort(delegate(Pontuacao a, Pontuacao b) { return a.Pontos.CompareTo(b.Pontos);});
            ranking.Reverse();

            foreach (Pontuacao p in ranking)
            {
                Ranking.Recorde = p.Pontos;
                break;
            }
        }

        public Ranking()
        {
            recMouseAtual.Width = 1;
            recMouseAtual.Height = 1;
            aviso = new Aviso();
        }

        public void AbreArquivo(ContentManager Content)
        {
            string[] ListaRanking = new string[11];

            StreamReader Arquivo = null;

            try
            {
                Arquivo = new StreamReader(@"../arquivo3.dig");
                if (Arquivo == null)
                {
                    Console.WriteLine("nulo");
                }
            }

            catch (Exception e)
            {
                StreamWriter sw = new StreamWriter(@"../arquivo3.dig", true);
                //CONFERIR SE ESSE ENDEREÇO ABSOLUTO VAI EXISTIR NA INSTALAÇÃO 
                //COLOCAR EM UM ENDEREÇO QUE GARANTA QUE VÁ EXISTIR
                sw.Write("");
                sw.Close();
            }

            int i = 0;

            string[] arrayPonts = new string[2];
            if (Arquivo != null)
            {
                while (Arquivo.Peek() >= 0)
                {
                    if (i == 0)
                    {
                        arrayPonts[0] = Arquivo.ReadLine();
                    }

                    if (i == 1)
                    {
                        arrayPonts[1] = Arquivo.ReadLine();
                        ranking.Add(new Pontuacao(arrayPonts[0], Convert.ToInt32(arrayPonts[1])));
                        i = -1;
                    }

                    i++;
                }

            Arquivo.ReadToEnd();
            Arquivo.Close();
            }
        }

        public void Load(ContentManager Content)
        {
            telaRanking = Content.Load<Texture2D>("ranking");
            botao = Content.Load<Texture2D>("botaomenu");

            Texto = Content.Load<SpriteFont>("SpriteFont1");

            ranking.Sort(delegate(Pontuacao a, Pontuacao b) { return a.Pontos.CompareTo(b.Pontos); });
            ranking.Reverse();
            foreach (Pontuacao p in ranking)
            {
                Console.WriteLine(p.Nome + " " + p.Pontos);
            }
            aviso.LoadContent(Content);
        }

        public void Update(GameTime gameTime, KeyboardState teclado_atual, KeyboardState teclado_anterior)
        {
            aviso.Update();
            if (teclado_atual.IsKeyDown(Keys.Enter) && !teclado_anterior.IsKeyDown(Keys.Enter))
            {
                GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.MENU;
            }
        }

        int Cont = 0;

        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(telaRanking, Vector2.Zero, Color.White);
            aviso.Draw(spriteBatch);
            if (mostraRanking)
            {
                mostraRanking = false;

                foreach (Pontuacao p in ranking)
                {
                    Console.WriteLine(p.Nome + " " + p.Pontos);
                }
            }
            int i = 100; //Y para o primeiro do ranking.
            int j = 0; //número máximo de pessoas que serão apresentados no ranking.
            ranking.Sort(delegate(Pontuacao a, Pontuacao b) { return a.Pontos.CompareTo(b.Pontos); });
            ranking.Reverse();

            foreach (Pontuacao p in ranking)
            {
                if (j < 5)
                {
                    spriteBatch.DrawString(Texto, p.Nome + " " + p.Pontos, new Vector2(450, i), new Color (13, 114, 185));
                    i += 90;
                    j++;
                }
            }

            spriteBatch.Draw(botao, new Vector2(10, 450), Color.White);
        }
    }
}
